package com.example.tdj;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.HeatMap;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.Overlay;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.map.PolygonOptions;
import com.baidu.mapapi.map.PolylineOptions;
import com.baidu.mapapi.model.LatLng;
import com.example.DATA.Data0;
import com.example.DATA.Data1;
import com.example.DATA.Data10;
import com.example.DATA.Data11;
import com.example.DATA.Data12;
import com.example.DATA.Data13;
import com.example.DATA.Data14;
import com.example.DATA.Data15;
import com.example.DATA.Data17;
import com.example.DATA.Data18;
import com.example.DATA.Data19;
import com.example.DATA.Data2;
import com.example.DATA.Data20;
import com.example.DATA.Data21;
import com.example.DATA.Data22;
import com.example.DATA.Data23;
import com.example.DATA.Data3;
import com.example.DATA.Data4;
import com.example.DATA.Data5;
import com.example.DATA.Data6;
import com.example.DATA.Data7;
import com.example.DATA.Data8;
import com.example.DATA.Data9;

/**
 * 热力图功能demo
 *
 * 介绍如何以热力图形形式显示用户自有数据
 */
public class HeatMap1 extends Activity {
    @SuppressWarnings("unused")
    private MapView mMapView;
    private BaiduMap mBaiduMap;
    /**
     * 热力图瓦片提供者
     * */
    private HeatMap heatmap;
    private Button mAdd;
    private Button mRemove;
    private boolean isDestroy;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        SDKInitializer.initialize(getApplicationContext());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.relitu);
        mMapView = (MapView) findViewById(R.id.mapview);
        mBaiduMap = mMapView.getMap();
//设置坐标
        LatLng current = new LatLng(30.54280268,114.3695334);
        MapStatus mapStatus = new MapStatus.Builder()
                .target(current).zoom(18).build();
        MapStatusUpdate update = MapStatusUpdateFactory.newMapStatus(mapStatus);
        mBaiduMap.setMapStatus(update);

        //添加标记
        //定义Maker坐标点
        LatLng point = new LatLng(30.54280288, 114.3695344);
        //构建Marker图标
        BitmapDescriptor bitmap = BitmapDescriptorFactory
                .fromResource(R.drawable.mark);
        //构建MarkerOption，用于在地图上添加Marker
        OverlayOptions option = new MarkerOptions()
                .position(point)
                .icon(bitmap);
        //在地图上添加Marker，并显示
        mBaiduMap.addOverlay(option);


        mAdd = (Button) findViewById(R.id.add);
        mRemove = (Button) findViewById(R.id.remove);
        mAdd.setEnabled(false);
        mRemove.setEnabled(false);

        //添加
        mAdd.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                addHeatMap();
            }
        });

        //删除
        mRemove.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                /**
                 * public void removeHeatMap()
                 * 删除该热力图
                 * */
                heatmap.removeHeatMap();
                mAdd.setEnabled(true);
                mRemove.setEnabled(false);
            }
        });

        addHeatMap();
    }

    private void addHeatMap() {
        final Handler h = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                if(!isDestroy){
                    /**
                     * public void addHeatMap(HeatMap heatmap)
                     * 添加热力图
                     * @param heatmap - 热力图
                     * */
                    mBaiduMap.addHeatMap(heatmap);
                }
                mAdd.setEnabled(false);
                mRemove.setEnabled(true);
            }
        };

        new Thread() {
            @Override
            public void run() {
                super.run();
                switch (MainActivity.flag1+MainActivity.flag2){
                    case 0:
                        List<LatLng> data0 = Data0.getLocations0();
                        heatmap = new HeatMap.Builder().data(data0).build();
                        break;
                    case 1:
                        List<LatLng> data1 = Data1.getLocations1();
                        heatmap = new HeatMap.Builder().data(data1).build();
                        break;
                    case 2:
                        List<LatLng> data2 = Data2.getLocations2();
                        heatmap = new HeatMap.Builder().data(data2).build();
                        break;
                    case 3:
                        List<LatLng> data3 = Data3.getLocations3();
                        heatmap = new HeatMap.Builder().data(data3).build();
                        break;
                    case 4:
                        List<LatLng> data4 = Data4.getLocations4();
                        heatmap = new HeatMap.Builder().data(data4).build();
                        break;
                    case 5:
                        List<LatLng> data5 = Data5.getLocations5();
                        heatmap = new HeatMap.Builder().data(data5).build();
                        break;
                    case 6:
                        List<LatLng> data6 = Data6.getLocations6();
                        heatmap = new HeatMap.Builder().data(data6).build();
                        break;
                    case 7:
                        List<LatLng> data7 = Data7.getLocations7();
                        heatmap = new HeatMap.Builder().data(data7).build();
                        break;
                    case 8:
                        List<LatLng> data8 = Data8.getLocations8();
                        heatmap = new HeatMap.Builder().data(data8).build();
                        break;
                    case 9:
                        List<LatLng> data9 = Data9.getLocations9();
                        heatmap = new HeatMap.Builder().data(data9).build();
                        break;
                    case 10:
                        List<LatLng> data10 = Data10.getLocations10();
                        heatmap = new HeatMap.Builder().data(data10).build();
                        break;
                    case 11:
                        List<LatLng> data11 = Data11.getLocations11();
                        heatmap = new HeatMap.Builder().data(data11).build();
                        break;
                    case 12:
                        List<LatLng> data12 = Data12.getLocations12();
                        heatmap = new HeatMap.Builder().data(data12).build();
                        break;
                    case 13:
                        List<LatLng> data13 = Data13.getLocations13();
                        heatmap = new HeatMap.Builder().data(data13).build();
                        break;
                    case 14:
                        List<LatLng> data14 = Data14.getLocations14();
                        heatmap = new HeatMap.Builder().data(data14).build();
                        break;
                    case 17:
                        List<LatLng> data15 = Data15.getLocations15();
                        heatmap = new HeatMap.Builder().data(data15).build();
                        break;
                    case 20:
                        List<LatLng> data17 = Data17.getLocations17();
                        heatmap = new HeatMap.Builder().data(data17).build();
                        break;
                    case 32:
                        List<LatLng> data18 = Data18.getLocations18();
                        heatmap = new HeatMap.Builder().data(data18).build();
                        break;
                    case 47:
                        List<LatLng> data19 = Data19.getLocations19();
                        heatmap = new HeatMap.Builder().data(data19).build();
                        break;
                    case 69:
                        List<LatLng> data20 = Data20.getLocations20();
                        heatmap = new HeatMap.Builder().data(data20).build();
                        break;
                    case 84:
                        List<LatLng> data21 = Data21.getLocations21();
                        heatmap = new HeatMap.Builder().data(data21).build();
                        break;
                    case 95:
                        List<LatLng> data22 = Data22.getLocations22();
                        heatmap = new HeatMap.Builder().data(data22).build();
                        break;
                }
                /**
                 * HeatMap.Builder:热力图构造器
                 *
                 * public HeatMap.Builder data(java.util.Collection<LatLng> val)
                 * 设置热力图绘制的数据，data 或 weightedData接口必须设置其中之一
                 * @param val - 热力图绘制数据，不能为null，大小不能为 0
                 * @return 更新后的热力图瓦片提供者构造器引用
                 *
                 * public HeatMap build()
                 * 构造热力图，调用该函数之前必须先通过 data 或者 weightedData 函数设置该热力图所要渲染的数据。
                 * build过程在数据量（位置点）比较多的时候比较耗时，
                 * 该操作可以放到一个工作线程中去做，待工作线程执行完再在 UI 线程中调用
                 * BaiduMap 的 addHeatMap 接口添加热力图。
                 * 若数据量很小，该操作可以在 UI 线程中执行。
                 *
                 * @return 构造好的热力图瓦片提供者
                 * */

                h.sendEmptyMessage(0);
            }
        }.start();
    }

    @Override
    protected void onPause() {
        super.onPause();
        // activity 暂停时同时暂停地图控件
        mMapView.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        // activity 恢复时同时恢复地图控件
        mMapView.onResume();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        isDestroy = true;
        // activity 销毁时同时销毁地图控件
        mMapView.onDestroy();
    }

}